<?php

/**********************************************************************
 * 根目录（ROOT）
 * 在开发时使用的IIS服务器有时会找不到$_SERVER['DOCUMENT_ROOT']
 * 所以，此处做了IIS的兼容处理
 *********************************************************************/
// if (!empty($_SERVER['SCRIPT_FILENAME'])) {
//     $_SERVER['DOCUMENT_ROOT'] = str_replace('\\', '/', substr($_SERVER['SCRIPT_FILENAME'], 0, 0 - strlen($_SERVER['PHP_SELF'])));
// }
// else if (!empty($_SERVER['PATH_TRANSLATED'])) {
//     $_SERVER['DOCUMENT_ROOT'] = str_replace('\\', '/', substr(str_replace('\\\\', '\\', $_SERVER['PATH_TRANSLATED']), 0, 0 - strlen($_SERVER['PHP_SELF'])));
// }
// define('ROOT', $_SERVER['DOCUMENT_ROOT'] . '/');

/**********************************************************************
 * 错误提示INI设置
 *********************************************************************/
if (strtolower(ENV) == 'prod') {
    ini_set("display_errors", "Off");
    error_reporting(E_ALL ^ E_NOTICE);
} else {
    ini_set("display_errors", "On");
    error_reporting(E_ALL | E_STRICT);
}

/**********************************************************************
 * 错误处理器
 *********************************************************************/

set_error_handler(function($num, $str, $file, $line) {
    errorTrace($num, $str, $file, $line);
}, strtolower(ENV) == 'prod' ? E_ALL ^ E_NOTICE : E_ALL | E_STRICT);

/**********************************************************************
 * 异常处理器
 *********************************************************************/

set_exception_handler(function(Throwable $e) {
    errorTrace($e->getCode(), $e->getMessage(), $e->getFile(), $e->getLine());
});

/**********************************************************************
 * 错误与异常追踪器
 *********************************************************************/

function errorTrace($num, $str, $file, $line) {

    // 追踪纪录错误和异常
    if (strtolower(ENV) == 'prod') {
        // 生产环境下,错误和异常进ES
    } 

    else {
        echo "errno: ${num}<br>";
        echo "errstr: ${str}<br>";
        echo "errfile: ${file}<br>";
        echo "errline: ${line}<br>";
    }
    
    // else {
    //     echo "<br>";
    //     echo "错误编号errno: $num<br>";
    //     echo "错误信息errstr: $str<br>";
    //     echo "出错文件errfile: $file<br>";
    //     echo "出错行号errline: $line<br>";


    //     $res = Result::eVerifyError('系统错误');
    //     $es = new Esearch('trace_error',"index");
    //     //获取用户信息
    //     $redis = Rdb::pconnect(RDB['session']);
    //     $redisKey = Profile::getKey();
    //     $userinfo = json_decode($redis->hGet($redisKey, 'userinfo'), true);
    //     $uid = $userinfo['uid'];

    //     $type = '非法错误';
    //     $postparams = '';
    //     if(Get::method() == 'post'){
    //         $postparams = json_encode($_POST);
    //     }
    //     $param = [
    //         "uid" => $uid,
    //         "created" => time(),
    //         "appname" => APPNAME,
    //         "method" => Get::method(),
    //         "type" => $type,
    //         "dir" => File::getDir($_SERVER['SCRIPT_FILENAME']),
    //         "file" => File::getFilename($_SERVER['SCRIPT_FILENAME']),
    //         "querystring" => $_SERVER['QUERY_STRING'],
    //         "postparams" => $postparams,
    //         "code" => $res['code'],
    //         "msg" => $res['msg'],
    //         "data" => '',
    //     ];
    //     $es->insertDoc($param);
    // }
}